//################################################################################
// MIT License
// Copyright (c) 2024 ZhangYihua
//
// Change Logs:
// Date           Author       Notes
// 2023-10-30     ZhangYihua   first version
//
// Description  : 
//################################################################################

module one_ccnt #(
parameter           CW                      = 16
) ( 
input                                       rst_n,
input                                       clk,

input                                       clr,
input                                       ce,

output  reg         [CW-1:0]                cnt
);

//################################################################################
// define local varialbe and localparam
//################################################################################
localparam [CW-1:0] ONE                     = 1;

//################################################################################
// main
//################################################################################

always@(posedge clk or negedge rst_n) begin
    if (rst_n==1'b0) begin
        cnt <=`U_DLY {CW{1'b0}};
    end else begin
        if (clr==1'b1)
            cnt <=`U_DLY (ce==1'b1) ? ONE : {CW{1'b0}};
        else if (ce==1'b1) begin
            cnt <=`U_DLY cnt + 1'b1;
        end else
            ;
    end
end

//################################################################################
// ASSERTION
//################################################################################

`ifdef CBB_ASSERT_ON
// synopsys translate_off


// synopsys translate_on
`endif

endmodule
